<!DOCTYPE html>
<html lang="en">
  
  <head>
    <meta charset="utf-8">
    <title>O2scl</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" 
	  content="Object-oriented Scientific Computing Library">
    <link href="bootstrap.css" rel="stylesheet">
    <link href="bootstrap-responsive.css" rel="stylesheet">
  </head>

  <body>
    
    <div class="container">

      <div class="row">
	<div class="col-sm-5">
	  <h1>Why O<sub>2</sub>scl?
	  </h1>
	  <p>
	    A brief discussion of the context of this
	    object-oriented scientific computing library.
	  </p>
	</div>
	<div class="col-sm-7">
	  <p align="right">
	    &nbsp;<br>
	    <h3>
	      <a href="https://neutronstars.utk.edu/code/o2scl/html/index.html">O<sub>2</sub>scl
		User's Guide</a></h3>
	    <a href="http://github.com/awsteiner/o2scl">O<sub>2</sub>scl 
	      at github.com</a>
	  </p>
	</div>
      </div>
      
      <hr>
      
      <div class="row">

	<div class="col-sm-3">
	  <!-- style="background-color: #eeeeee;"> -->

	  <p>
	    <h2><a href="#resgroup">No reinventing the wheel</a></h2>
	  </p>

	  <hr>

	  <p>
	    <h2><a href="#scicomp">Scientific computing is changing</a></h2>
	  </p>

	  <hr>

	</div>

	<div class="col-sm-9">

	  <div class="alert alert-success">
	    <a name="resgroup"></a>
	    <h2>I needed to provide a computing framework for
	      my research group. <small>(Necessity is the
		mother of invention.)</small> </h2>
	  </div>
	  <p>
	    <h4>I want my students and colleagues to be able
	      to have a head start.
	    </h4>
	  </p>
	  <ul>
	    <p>
	      <li><em>There is little point in having a student
		  to rewrite old code over again when there
		  are so many great new problems that need solving.</em>
	      </li>
	    </p>
	    <p>
	      <li>
		<em>I wanted something easy to install and use.</em>
	    </li></p>
	    <p>
	      O<sub>2</sub>scl takes advantage of homebrew
	      and travis-ci.org to make sure installation
	      and testing works.
	    </p>
	  </ul>
	  
	  <div class="alert alert-success">
	    <a name="scicomp"></a>
	    <h2>Scientific computing has changed significantly
	      in the past few years. <small>(Or maybe a bit more than a 
		few.)</small></h2>
	  </div>
	  <p>
	    <h4>
	      C++0x and C++11 (and their precursors in Boost) have made
	      scientific computing much easier!
	    </h4>
	  </p>
	  <ul>
	    <p>
	      <li><em>For example, lambda functions make mathematical methods much
		  easier to implement.</em></li>
	    </p>
	    <p>
	      Function objects
	      can now be defined and manipulated very succinctly:
	      <pre>
		double a=-0.9, b=0.9;
		<a href="http://o2scl.sourceforge.net/o2scl/html/classo2scl_1_1root__brent__gsl.html">o2scl::root_brent_gsl&lt;&gt;</a> solver;
		std::function&lt;double(double)&gt; f=[](double x){ return sin(x)-0.1; };
		solver.solve(a,b,f);
		cout &lt;&lt; a &lt;&lt; endl;
	      </pre>
              (adapted from
              O<sub>2</sub>scl's <tt>ex_lambda.cpp</tt>
              example)
	    </p>
	    <p>
	      <li><em>Sometimes the best solution is a combination
		  of several different languages and libraries.</em></li>
	    </p>
	    <p>
	      Python has enabled fast development, but
	      we still want fast execution from C++. GSL
	      is great for many problems, but Fourier
	      transforms are better done in FFTW and
	      linear algebra is better implemented
	      in uBlas, Eigen, or Armadillo. 
	    </p>
	  </ul>
	  
	  <!-- End of "col-sm-9" -->
	</div>
	
	<!-- End of row -->
      </div>

      <!-- End of container -->
    </div>

    <hr>
    <small>
      &nbsp;&nbsp;&nbsp;&nbsp;Built 
      with <a href="http://getbootstrap.com">Bootstrap</a>.
    </small>
    
    <!-- 

	 File I/O is more sophisticated and more important
	 - HDF5 I/O is one of many well-trodden standards
	 - Open data means file formats are important

	 New dogs can learn old tricks
	 - Some legacy code in Fortran is rewritten in C++
	 - Several classes are based on GSL

	 Documentation is important

	 * mroot_hybrids example
	 * funct_strings11 example
	 * root_brent_gsl vs. root_boost_toms748
	 * Talk about --disable-cpp11
	 * HDF5 example?
	 * interp2_direct example
	 * Good cernlib example
	 * Talk about compilation on hopper, edison, and carver
	 
      -->
    
    <script src="jquery-2.0.3.min.js"></script>
    <script src="bootstrap.js"></script>

  </body>
  
</html>
